// 加载模块
const express = require('express')
const goods = require('../db/models/goodsModel')

// 生成路由实例
const router = express.Router()

/**
 * @api {post} /goods/add 添加商品
 * @apiGroup goods
 *   
 * @apiParam {Number} id 商品id
 * @apiParam {String} title 商品标题
 * @apiParam {String} imgurl 商品图片地址
 * @apiParam {String} img1 商品图片地址
 * @apiParam {String} img2 商品图片地址
 * @apiParam {String} img3 商品图片地址
 * @apiParam {String} img4 商品图片地址
 * @apiParam {String} img5 商品图片地址
 * @apiParam {String} price 商品价格
 * @apiParam {String} desc 商品描述
 * @apiParam {String} type 商品类型
 * @apiParam {String} style 商品类型
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "添加成功"
 * }
 */
// 要获取到这个要这样写接口地址：localhost:3000/goods/add
router.post('/add', (req, res) => {
    let { id, title, imgurl, price, desc, type, style, img1, img2, img3, img4, img5 } = req.body
        // 对数据进行校验（空值，格式，长度等）
    if (!id || !title || !imgurl || !price || !desc || !type || !style || !img1 || !img2 || !img3 || !img4 || !img5) {
        return res.send({ err: -1, msg: '参数错误' })
    }

    // 判断数据是否已有该数据
    goods.find({ id })
        .then((data) => {
            if (data.length > 0) {
                res.send({ err: -2, msg: '该数据已存在' })
            } else {
                return goods.insertMany({ id, title, imgurl, img1, img2, img3, img4, img5, price, desc, type, style })
            }
        })
        .then((data) => {
            res.send({ err: 0, msg: '添加成功' })
        })
        .catch((err) => {
            res.send({ err: -3, msg: '添加失败' })
        })

    // res.send('add ok')
})

/**
 * @api {post} /goods/getType 分类查询
 * @apiGroup goods
 *
 * @apiParam {String} type 商品分类
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "查询成功",
 *     "data": [{...},{...}]
 * }
 */
router.post('/getType', (req, res) => {
    let { type } = req.body
        // 对数据进行校验（空值，格式，长度等）
    if (!type) {
        return res.send({ err: -1, msg: '参数错误' })
    }

    // 查询分类数据
    goods.find({ type })
        .then((data) => {
            if (data.length > 0) {
                res.send({ err: 0, msg: '查询成功', data: data })
            } else {
                res.send({ err: -1, msg: '暂无数据', data: [] })
            }
        })
        .catch((err) => {
            res.send({ err: -2, msg: '查询失败' })
        })
})



// *******************************************************************************

/**
 * @api {post} /goods/getId id查询
 * @apiGroup goods
 *
 * @apiParam {String} id 商品id
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "查询成功",
 *     "data": [{...}]
 * }
 */
router.post('/getId', (req, res) => {
    let { id } = req.body
        // 对数据进行校验（空值，格式，长度等）
    if (!id) {
        return res.send({ err: -1, msg: '参数错误' })
    }

    // 查询Id数据
    goods.find({ id })
        .then((data) => {
            if (data.length > 0) {
                res.send({ err: 0, msg: '查询成功', data: data })
            } else {
                res.send({ err: -1, msg: '暂无数据', data: [] })
            }
        })
        .catch((err) => {
            res.send({ err: -2, msg: '查询失败' })
        })
})



// *****************************************************************************

/**
 * @api {post} /goods/search 关键字查询
 * @apiGroup goods
 *
 * @apiParam {String} kw 关键字
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "查询成功",
 *     "data": [{...},{...}]
 * }
 */
router.post('/search', (req, res) => {
    let { kw } = req.body
    let reg = new RegExp(kw)
        // 对数据进行校验（空值，格式，长度等）
    if (!kw) {
        return res.send({ err: -1, msg: '参数错误' })
    }

    // 查询数据
    goods.find({ $or: [{ title: { $regex: reg } }, { desc: { $regex: reg } }] })
        .then((data) => {
            if (data.length > 0) {
                res.send({ err: 0, msg: '查询成功', data: data })
            } else {
                res.send({ err: -1, msg: '暂无数据', data: [] })
            }
        })
        .catch((err) => {
            res.send({ err: -2, msg: '查询失败' })
        })
})

/**
 * @api {post} /goods/getPage 分页查询
 * @apiGroup goods
 *
 * @apiParam {String} page 页码
 * @apiParam {String} size 每页数据条数
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "查询成功",
 *     "data": [{...},{...}],
 *     "pages": 3,
 *     "count": 10
 * }
 */
router.post('/getPage', (req, res) => {
    let { page, size } = req.body
    page = page || 1 // 页码，默认第一页
    size = size || 4 // 每页条数，默认4条
    let pages = 0 // 数据总页数
    let count = 0 // 数据总条数
        // 查询数据
    goods.find()
        .then((data) => {
            count = data.length // 数据总条数
            pages = Math.ceil(count / size) // 数据总页数

            // 查询指定页码的数据
            return goods.find().limit(Number(size)).skip(Number((page - 1) * size))
        })
        .then((data) => {
            res.send({ err: 0, msg: '查询成功', data: data, pages: pages, count: count })
        })
        .catch((err) => {
            res.send({ err: -2, msg: '查询失败' })
        })
})

// 获取数据接口
/**
 * @api {post} /goods/getGoods 修改商品
 * @apiGroup goods
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "修改成功",
 *     "data":[]
 * }
 */
router.get('/getGoods', (req, res) => {

    goods.find()
        .then((data) => {
            if (data.length > 0) {
                res.send({ err: 1, msg: '访问成功', data: data })
            } else {
                res.send({ err: 0, msg: '访问失败', data: [] })
            }
        })

    // res.send('add ok')
})



/**
 * @api {post} /goods/update 修改商品
 * @apiGroup goods
 *
 * @apiParam {String} name 商品名称
 * @apiParam {String} price 商品价格
 * @apiParam {String} desc 商品描述
 * @apiParam {String} type 商品分类
 * @apiParam {String} code 商品编号
 * @apiParam {String} imgurl 商品图片地址
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "修改成功"
 * }
 */
router.post('/update', (req, res) => {
    let { id, title, imgurl, img1, img2, img3, img4, img5, price, desc, type, style } = req.body
        // 对数据进行校验（空值，格式，长度等）
    if (!id || !style || !price || !desc || !type || !title || !imgurl || !img1 || !img2 || !img3 || !img4 || !img5) {
        return res.send({ err: -1, msg: '参数错误' })
    }

    // 修改数据
    goods.updateOne({ id }, { $set: { id, title, imgurl, img1, img2, img3, img4, img5, price, desc, type, style } })
        .then((data) => {
            res.send({ err: 0, msg: '修改成功' })
        })
        .catch((err) => {
            res.send({ err: -1, msg: '修改失败' })
        })

    // res.send('add ok')
})



/**
 * @api {get} /goods/del 删除商品
 * @apiGroup goods
 *
 * @apiParam {String} code 商品编号
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "删除成功"
 * }
 */
router.post('/del', (req, res) => {
    let { id } = req.body
        // 对数据进行校验（空值，格式，长度等）
    if (!id) {
        return res.send({ err: -1, msg: '参数错误' })
    }
    goods.deleteOne({ id })
        .then((data) => {
            res.send({ err: 0, msg: '删除成功' })
        })
        .catch((err) => {
            res.send({ err: -2, msg: '删除失败' })
        })

    // res.send('del ok')
})

module.exports = router